﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;

namespace RiskMan.DataClass.Models.Plaza_II.FortsFutInfoRepl
{
    /// <summary>
    /// Таблица 36. Поля таблицы multileg_dict - Справочник связок
    /// </summary>
    public class MultilegDict : INotifyPropertyChanged
    {
        #region private

        private long _replId;
        private long _replRev;
        private long _replAct;
        private int _sessId;
        private int _isinId;
        private int _isinIdLeg;
        private int _qtyRatio;
        #endregion

        #region public

        /// <summary>
        /// Служебное поле подсистемы репликации
        /// </summary>
        public long ReplId
        {
            get { return _replId; }
            set
            {
                if (_replId != value)
                {
                    _replId = value;
                    RaisePropertyChanged("ReplId");
                }
            }
        }

        /// <summary>
        /// Служебное поле подсистемы репликации
        /// </summary>
        public long ReplRev
        {
            get { return _replRev; }
            set
            {
                if (_replRev != value)
                {
                    _replRev = value;
                    RaisePropertyChanged("ReplRev");
                }
            }
        }

        /// <summary>
        /// Служебное поле подсистемы репликации
        /// </summary>
        public long ReplAct
        {
            get { return _replAct; }
            set
            {
                if (_replAct != value)
                {
                    _replAct = value;
                    RaisePropertyChanged("ReplAct");
                }
            }
        }


        /// <summary>
        /// Идентификатор торговой сессии
        /// </summary>
        public int SessId
        {
            get { return _sessId; }
            set
            {
                if (_sessId != value)
                {
                    _sessId = value;
                    RaisePropertyChanged("SessId");
                }
            }
        }

        /// <summary>
        /// Уникальный числовой идентификатор инструмента
        /// </summary>
        public int IsinId
        {
            get { return _isinId; }
            set
            {
                if (_isinId != value)
                {
                    _isinId = value;
                    RaisePropertyChanged("IsinId");
                }
            }
        }


        /// <summary>
        /// Уникальный код инструмента, входящего в связку
        /// </summary>
        public int IsinIdLeg
        {
            get { return _isinIdLeg; }
            set
            {
                if (_isinIdLeg != value)
                {
                    _isinIdLeg = value;
                    RaisePropertyChanged("IsinIdLeg");
                }
            }
        }

        /// <summary>
        /// Коэффициент количества
        /// Смысл поля qty_ratio состоит в указании количества и направления инструмента, входящего в связку: если
        /// значение qty_ratio больше 0, то данный инструмент входит в связку с тем же направлением, с каким и заявка по
        /// связке, если qty_ratio меньше 0 – с противоположным. Абсолютное значение qty_ratio определяет коэффициент,
        /// на который умножается количество единиц инструмента-связки в заявке для получения количества единиц
        /// инструмента isin_id_leg.
        /// </summary>
        public int QtyRatio
        {
            get { return _qtyRatio; }
            set
            {
                if (_qtyRatio != value)
                {
                    _qtyRatio = value;
                    RaisePropertyChanged("QtyRatio");
                }
            }
        }


        #endregion


        #region event PropertyChangedEventHandler

        public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        #endregion

        #region processing
        public static MultilegDict ParseMultilegDict(Dictionary<String, String> relation)
        {
            MultilegDict tmp = new MultilegDict();
            tmp.Parse(relation);
            return tmp;
        }

        public void Parse(Dictionary<String, String> relation)
        {
            foreach (String field in relation.Keys)
            {
                String value = relation[field];

                switch (field)
                {
                    case "replID": long.TryParse(value, out _replId); break;
                    case "replRev": long.TryParse(value, out _replRev); break;
                    case "replAct": long.TryParse(value, out _replAct); break;
                    case "sess_id": int.TryParse(value, out _sessId); break;
                    case "isin_id": int.TryParse(value, out _isinId); break;
                    case "isin_id_leg": int.TryParse(value, out _isinIdLeg); break;
                    case "qty_ratio": int.TryParse(value, out _qtyRatio); break; 


                };
            }
        }

        public static void AddValueToObsColMultilegDict(MultilegDict inst)
        {
            MainWindow.StaticLevel._dataProvider.MultilegDictList.Add(inst);
        }
        #endregion
    }
}
